// 封装分类数据业务相关代码
import { ref, onMounted } from 'vue'
// import { ref, watch, onMounted } from 'vue'
import { useRoute, onBeforeRouteUpdate } from 'vue-router'
import { getCategoryAPI } from '@/apis/category'

export function useCategory() {
    const categoryData = ref({})
    const route = useRoute()

    const getCategory = async (id = route.params.id) => {
        const res = await getCategoryAPI(id)
        // console.log(res)
        categoryData.value = res.result
    }

    onMounted(() => getCategory())

    /**
     * 路由缓存问题解决
     * 缓存问题：当路由path一样，参数不同的时候会选择直接复用路由对应的组件
     * 解决方案：
     * 1. 给 routerv-view 添加key属性，破坏缓存
     * 2. 使用 onBeforeRouteUpdate钩子函数，做精确更新
    */

    // 目标:路由参数变化的时候 可以把分类数据接口重新发送(banner请求接口是固定的,不每次发送)
    //1. onBeforeRouteUpdate钩子函数,在路由发生变化的时候触发
    onBeforeRouteUpdate((to) => {
        // console.log('路由变化了')
        // 存在问题:使用最新的路由参数请求最新的分类数据
        // to:目标路由对象
        // console.log(to)
        getCategory(to.params.id)
    })

    // 2. 监听器的方式
    // watch(() => route.params.id, (newValue) => {
    //     //console.log(newValue)
    //     newValue && getCategory(newValue)
    // }, {
    //     immediate: true
    // })

    // 以对象的方式return
    return {
        categoryData
    }
}

